GitHub Access Token became invalid

It seems like the GitHub access token used for retrieving details about this repository from GitHub became invalid. This might prevent certain types of inspections from being run (in particular, everything related to pull requests).
Please ask an admin of your repository to re-new the access token on this website.

editor.js ➔ ???   B
last analyzed

Complexity

Conditions 4
Paths 4

Size

Total Lines 48

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 4
c 0
b 0
f 0
nc 4
dl 0
loc 48
rs 8.7396
nop 2

1 Function

Rating   Name   Duplication   Size   Complexity  
A editor.js ➔ ... ➔ ??? 0 14 2
1
import { fromJS, Map, List } from 'immutable';
2
3
import { Editor } from './../../../records';
4
import { generateLastUpdate } from './../../../util/lastUpdate';
5
6
import {
7
    getData,
8
    setDataAtDataIndex,
9
    setKeysInData,
10
    nameFromDataIndex
11
} from './../../../util/getData';
12
13
export const editRow = (state, {
14
    columns, editMode, rowIndex, rowId, stateKey, top, isCreate, values
15
}) => {
16
17
    if (!values.toJS) {
18
        values = fromJS(values);
19
    }
20
21
    const { invalidCells, isValid } = isRowValid(columns, values);
22
23
    let overrides = state.getIn([stateKey, rowId, 'overrides'])
24
        ? state.getIn([stateKey, rowId, 'overrides'])
25
        : new Map();
26
27
    columns.forEach((col, i) => {
28
        const val = getData(values, columns, i);
29
        const dataIndex = col.dataIndex;
30
31
        // setting disabled
32
        if (!overrides.get(dataIndex)) {
33
            overrides = overrides.set(dataIndex, new Map());
34
        }
35
36
        overrides = overrides.setIn(
37
            [dataIndex, 'disabled'],
38
            setDisabled(col, val, values)
39
        );
40
    });
41
42
    const operation = editMode === 'inline'
43
        ? 'setIn'
44
        : 'mergeIn';
45
46
    return state[operation]([stateKey], fromJS({
47
        [rowId]: new Editor({
48
            key: rowId,
49
            values: fromJS(values),
50
            rowIndex,
51
            top,
52
            valid: isValid,
53
            invalidCells,
54
            isCreate: isCreate || false,
55
            overrides: overrides
56
        }),
57
        lastUpdate: generateLastUpdate()
58
    }));
59
60
};
61
62
export const setData = (state, { data, editMode, stateKey }) => {
63
    if (editMode === 'grid') {
64
65
        const keyedData = setKeysInData(data);
66
        const editorData = keyedData.reduce((prev, curr, i) => {
67
            return prev.set(curr.get('_key'), new Editor({
68
                key: curr.get('_key'),
69
                values: curr,
70
                rowIndex: i,
71
                top: null,
72
                valid: null,
73
                isCreate: false,
74
                overrides: Map()
75
            }));
76
        }, Map({ lastUpdate: generateLastUpdate() }));
77
78
        return state.mergeIn([stateKey], editorData);
79
    }
80
81
    return state;
82
};
83
84
export const rowValueChange = (state, {
85
    column, columns, value, rowId, stateKey
86
}) => {
87
88
    const colTriggeringChange = nameFromDataIndex(column);
89
    const previousEditorState = state.getIn([stateKey, rowId]);
90
    const previousValues = previousEditorState
91
        ? previousEditorState.values
92
        : new Map();
93
94
    let overrides = previousEditorState
95
        ? previousEditorState.overrides
96
        : new Map();
97
98
    let rowValues = setDataAtDataIndex(
99
        previousValues, column.dataIndex, value
100
    );
101
102
    columns.forEach((col, i) => {
103
        const val = getData(rowValues, columns, i);
104
        const dataIndex = nameFromDataIndex(col);
105
106
        // interpreting `change func` to set final values
107
        // happens first, due to other validation
108
        // need to turn back to immutable, since data is
109
        // being retrieved externally
110
        rowValues = fromJS(
111
            handleChangeFunc(col, rowValues, colTriggeringChange)
112
        );
113
114
        // setting default value
115
        if (col.defaultValue !== undefined
116
            && val === undefined || val === null) {
117
            rowValues = setDataAtDataIndex(
118
                rowValues, dataIndex, col.defaultValue
119
            );
120
        }
121
122
        // setting disabled
123
        if (!overrides || !overrides.get) {
124
            overrides = new Map();
125
        }
126
127
        if (!overrides.get(dataIndex)) {
128
            overrides = overrides.set(dataIndex, Map());
129
        }
130
131
        overrides = overrides.setIn(
132
            [dataIndex, 'disabled'], setDisabled(col, val, rowValues)
133
        );
134
    });
135
136
    const { invalidCells, isValid } = isRowValid(columns, rowValues);
137
138
    const record = state.getIn([stateKey, rowId]) || new Editor();
139
    const updated = record.merge({
140
        values: rowValues,
141
        previousValues: record.values,
142
        valid: isValid,
143
        invalidCells,
144
        overrides
145
    });
146
147
    state = state.setIn([stateKey, rowId], updated);
148
149
    return state.setIn(
150
        [stateKey, 'lastUpdate'],
151
        generateLastUpdate()
152
    );
153
};
154
155
export const repositionEditor = (state, { rowId, stateKey, top }) => {
156
    const record = state.getIn([stateKey, rowId]);
157
    const updated = record.merge({ top });
158
    const newState = state.mergeIn([stateKey, rowId], updated);
159
160
    return newState.mergeIn(
161
        [stateKey],
162
        { lastUpdate: generateLastUpdate() }
163
    );
164
};
165
166
export const removeEditorState = (state, { stateKey }) => state.setIn(
167
    [stateKey],
168
    fromJS({ lastUpdate: generateLastUpdate() }));
169
170
// helpers
171
export const isCellValid = ({ validator }, value, values) => {
172
    if (!validator || !typeof validator === 'function') {
173
        return true;
174
    }
175
176
    const vals = values && values.toJS
177
        ? values.toJS()
178
        : values;
179
180
    return validator({ value, values: vals });
181
};
182
183
export const isRowValid = (columns, rowValues) => {
184
    let invalidCells = new List();
185
    let isValid = true;
186
187
    for (let i = 0; i < columns.length; i++) {
188
189
        const col = columns[i];
190
        const val = isCellValid(col, getData(rowValues, columns, i), rowValues);
191
192
        if (!val) {
193
            invalidCells = invalidCells.push(nameFromDataIndex(col));
194
        }
195
        if (isValid && !val) {
196
            isValid = false;
197
        }
198
    }
199
200
    return { isValid, invalidCells };
201
};
202
203
export const setDisabled = (col = {}, value, values) => {
204
205
    if (col.disabled === true || col.disabled === 'false') {
206
        return col.disabled;
207
    }
208
209
    if (typeof col.disabled === 'function') {
210
211
        const vals = values && values.toJS
212
            ? values.toJS()
213
            : values;
214
215
        return col.disabled({
216
            column: col,
217
            value,
218
            values: vals
219
        });
220
    }
221
222
    return false;
223
224
};
225
226
export const handleChangeFunc = (col, rowValues, colTriggeringChange) => {
227
228
    const vals = rowValues
229
        && rowValues.toJS
230
        ? rowValues.toJS()
231
        : rowValues;
232
233
    if (!col.change || !typeof col.change === 'function') {
234
        return vals;
235
    }
236
237
    const overrideValue = col.change({ values: vals, eventSource: col }) || {};
238
239
    Object.keys(overrideValue).forEach(k => {
240
        // if the change is originating
241
        // from a the column that we want to override
242
        // ignore that specific change value
243
        if (k !== colTriggeringChange) {
244
            vals[k] = overrideValue[k];
245
        }
246
    });
247
248
    return vals;
249
};
250